package module

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
	"os"

	"time"
)
var db          *gorm.DB

func GetDB() *gorm.DB {
	return db
}
func InitDB()  {

		var err error
		m := DefaultConf.Mysql

		dsn := m.Username + ":" + m.Password + "@tcp(" + m.Path + ")/" + m.Dbname + "?" + m.Config
		mysqlConfig := mysql.Config{
			DSN:                       dsn,   // DSN data source name
			DefaultStringSize:         255,   // string 类型字段的默认长度
			DisableDatetimePrecision:  true,  // 禁用 datetime 精度，MySQL 5.6 之前的数据库不支持
			DontSupportRenameIndex:    true,  // 重命名索引时采用删除并新建的方式，MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
			DontSupportRenameColumn:   true,  // 用 `change` 重命名列，MySQL 8 之前的数据库和 MariaDB 不支持重命名列
			SkipInitializeWithVersion: false, // 根据版本自动配置
		}
		db, err = gorm.Open(mysql.New(mysqlConfig), gormConfig(m.LogMode))
		if  err != nil {
			Logger("error","MySQL启动异常",err)
			os.Exit(0)
		}

		sqlDB, _ := db.DB()

		sqlDB.SetMaxIdleConns(m.MaxIdleConns)
		sqlDB.SetMaxOpenConns(m.MaxOpenConns)
		sqlDB.SetConnMaxLifetime(time.Duration(DefaultConf.Mysql.MaxLifeTime)*time.Second)
		sqlDB.SetConnMaxIdleTime(time.Duration(DefaultConf.Mysql.MaxIdleTime)*time.Second)

}
// gormConfig 根据配置决定是否开启日志
func gormConfig(mod bool) *gorm.Config {

   zp:= zaplogger{}

	if mod {
		return &gorm.Config{
			Logger:                                   zp.LogMode(logger.Info),
			DisableForeignKeyConstraintWhenMigrating: true,
			NamingStrategy: schema.NamingStrategy{
				SingularTable: true,
			},
		}
	} else {
		return &gorm.Config{
			Logger:                                   zp.LogMode(logger.Silent),
			DisableForeignKeyConstraintWhenMigrating: true,
		}
	}
}